/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package controller;

import java.util.List;
import java.util.Map;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.persistence.EntityManager;
import modelo.Devolucion;

/**
 *
 * @author Toshiba
 */
public interface DevolucionControllerInterface {

    /**
     * Función para el Seteo de una posible Devolución
     * @return "devolucion_create"
     */
    String crearSetup();

    /**
     * Función para la creación y persistencia de una devolución.
     * @return String
     */
    String create();

    /**
     * Función para preparar los detalles de una Devolución
     * @return String
     */
    String detalleSetup();

    /**
     * Función para preparar la edición de una Devolución
     * @return String
     */
    String editSetup();

    /**
     * Función para buscar una devolucion por su identificador (id)
     * @param id
     * @return Devolucion
     */
    Devolucion findDevolucion(Integer id);

    /**
     * Función para Transformar la Devolución representado a una forma que pueda
     * ser transmitida en los jsps.
     * @return Map<Object, String>
     */
    Map<Object, String> getAsString();

    /**
     * Getter de la Devolucion representada.
     * @return Devolucion
     */
    Devolucion getDevolucion();

    /**
     * Getter de todas las Devoluciones de la Base de Datos.(Wrapper)
     * @return List<Devolucion>
     */
    List<Devolucion> getDevolucions();

    /**
     * Getter de todas las Devoluciones directamente de la Base de Datos.
     * @param all
     * @return List<Devolucion>
     */
    List<Devolucion> getDevolucions(boolean all);

    /**
     * Getter de las Devoluciones Disponibles en la base de datos
     * @return SelectItem[]
     */
    SelectItem[] getDevolucionsAvailableSelectMany();

    /**
     * Getter de las Devoluciones Disponibles en la base de datos con un
     * elemento vacio al principio del vector respuesta.
     * @return SelectItem[]
     */
    SelectItem[] getDevolucionsAvailableSelectOne();

    /**
     * Getter del Entity Manager desde su Factory
     * @return EntityManager
     */
    EntityManager getEntityManager();

    /**
     * Función para contar la cantidad de devoluciones en la base de datos
     * @return itemCount
     */
    int getItemCount();

    /**
     * Función para asignar el atributo devolucions y se pueda
     * utilizar en la lista de Devoluciones.
     * @return String
     */
    String listarSetup();

    /**
     * Función que Vincula y Valida JSP con la Devolución Representado.
     * @param facesContext
     * @param component
     * @param value
     */
    void validateCreate(FacesContext facesContext, UIComponent component, Object value);

}
